package com.itheima.idea;
import java.util.Scanner;
public class QuickSort {
    public static void main(String[] args) {
        int[] arr = new int[7];
        for (int i = 0; i < arr.length; i++) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入第"+(i+1)+"个数字进行快速排序");
            int num = sc.nextInt();
            arr[i]=num;
        }
        int start = 0;
        int end = arr.length - 1;
        quickSort(arr, start, end);
        printArray(arr);
    }

    public static void quickSort(int[] arr, int low, int high) {
        int start = low;
        int end = high;
        int key = arr[low];
        while (start < end) {
            //从后往前开始比较
            while (end > start && arr[end] >= key)//如果没有比关键值小的，比较下一个，直到有比关键值小的交换位置，然后又从前往后比较
                end--;
            if (arr[end] <= key) {
                int temp = arr[end];
                arr[end] = arr[start];
                arr[start] = temp;
            }
            //从前往后比较
            while (end > start && arr[start] <= key)//如果没有比关键值大的，比较下一个，直到有比关键值大的交换位置，然后又从后往前比较
                start++;
            if (arr[start] >= key) {
                int temp = arr[start];
                arr[start] = arr[end];
                arr[end] = temp;
            }
            //此时第一次循环比较结束，关键值的位置已经确定了。左边的值都比关键值小，右边的值都比关键值大，但是两边的顺序还有可能是不一样的，进行下面的递归调用
        }
        //递归
        if (start > low)
            quickSort(arr, low, start - 1);
        if (start < high)
            quickSort(arr, end + 1, high);

    }

    //打印数组
    public static void printArray(int[] arr) {
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            if (i != arr.length - 1)
                System.out.print(arr[i] + " ");
            else
                System.out.print(arr[i] + "]");
        }
    }
}



